home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / ROOMS < prev    next >
Text File  |  1991-05-20  |  20KB  |  941 lines

  1. /* RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1 */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include "funcs.h"
  8. #include "vars.h"
  9.  
  10. logical rappl1_(ri)
  11. integer ri;
  12. {
  13.     /* System generated locals */
  14.     integer i__1, i__2;
  15.     logical ret_val;
  16.  
  17.     /* Local variables */
  18.     logical f;
  19.     integer i;
  20.     integer j;
  21.  
  22.     ret_val = TRUE_;
  23. /*                         !USUALLY IGNORED. */
  24.     if (ri == 0) {
  25.     return ret_val;
  26.     }
  27. /*                         !RETURN IF NAUGHT. */
  28.  
  29. /*                         !SET TO FALSE FOR */
  30.  
  31. /*                         !NEW DESC NEEDED. */
  32.     switch (ri) {
  33.     case 1:  goto L1000;
  34.     case 2:  goto L2000;
  35.     case 3:  goto L3000;
  36.     case 4:  goto L4000;
  37.     case 5:  goto L5000;
  38.     case 6:  goto L6000;
  39.     case 7:  goto L7000;
  40.     case 8:  goto L8000;
  41.     case 9:  goto L9000;
  42.     case 10:  goto L10000;
  43.     case 11:  goto L11000;
  44.     case 12:  goto L12000;
  45.     case 13:  goto L13000;
  46.     case 14:  goto L14000;
  47.     case 15:  goto L15000;
  48.     case 16:  goto L16000;
  49.     case 17:  goto L17000;
  50.     case 18:  goto L18000;
  51.     case 19:  goto L19000;
  52.     case 20:  goto L20000;
  53.     case 21:  goto L21000;
  54.     case 22:  goto L22000;
  55.     case 23:  goto L23000;
  56.     case 24:  goto L24000;
  57.     case 25:  goto L25000;
  58.     case 26:  goto L26000;
  59.     case 27:  goto L27000;
  60.     case 28:  goto L28000;
  61.     case 29:  goto L29000;
  62.     case 30:  goto L30000;
  63.     case 31:  goto L31000;
  64.     case 32:  goto L32000;
  65.     case 33:  goto L33000;
  66.     case 34:  goto L34000;
  67.     case 35:  goto L35000;
  68.     case 36:  goto L36000;
  69.     case 37:  goto L37000;
  70.     }
  71.     bug_(1, ri);
  72.  
  73. /* R1--    EAST OF HOUSE.  DESCRIPTION DEPENDS ON STATE OF WINDOW */
  74.  
  75. L1000:
  76.     if (prsvec_1.prsa != vindex_1.lookw) {
  77.     return ret_val;
  78.     }
  79. /*                         !LOOK? */
  80.     i = 13;
  81. /*                         !ASSUME CLOSED. */
  82.     if ((objcts_1.oflag2[oindex_1.windo - 1] & OPENBT) != 0) {
  83.     i = 12;
  84.     }
  85. /*                         !IF OPEN, AJAR. */
  86.     rspsub_(11, i);
  87. /*                         !DESCRIBE. */
  88.     return ret_val;
  89.  
  90. /* R2--    KITCHEN.  SAME VIEW FROM INSIDE. */
  91.  
  92. L2000:
  93.     if (prsvec_1.prsa != vindex_1.lookw) {
  94.     return ret_val;
  95.     }
  96. /*                         !LOOK? */
  97.     i = 13;
  98. /*                         !ASSUME CLOSED. */
  99.     if ((objcts_1.oflag2[oindex_1.windo - 1] & OPENBT) != 0) {
  100.     i = 12;
  101.     }
  102. /*                         !IF OPEN, AJAR. */
  103.     rspsub_(14, i);
  104. /*                         !DESCRIBE. */
  105.     return ret_val;
  106.  
  107. /* R3--    LIVING ROOM.  DESCRIPTION DEPENDS ON MAGICF (STATE OF */
  108. /*     DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED) */
  109.  
  110. L3000:
  111.     if (prsvec_1.prsa != vindex_1.lookw) {
  112.     goto L3500;
  113.     }
  114. /*                         !LOOK? */
  115.     i = 15;
  116. /*                         !ASSUME NO HOLE. */
  117.     if (findex_1.magicf) {
  118.     i = 16;
  119.     }
  120. /*                         !IF MAGICF, CYCLOPS HOLE. */
  121.     rspeak_(i);
  122. /*                         !DESCRIBE. */
  123.     i = findex_1.orrug + 17;
  124. /*                         !ASSUME INITIAL STATE. */
  125.     if ((objcts_1.oflag2[oindex_1.door - 1] & OPENBT) != 0) {
  126.     i += 2;
  127.     }
  128. /*                         !DOOR OPEN? */
  129.     rspeak_(i);
  130. /*                         !DESCRIBE. */
  131.     return ret_val;
  132.  
  133. /*     NOT A LOOK WORD.  REEVALUATE TROPHY CASE. */
  134.  
  135. L3500:
  136.     if (prsvec_1.prsa != vindex_1.takew && (prsvec_1.prsa != vindex_1.putw || 
  137.         prsvec_1.prsi != oindex_1.tcase)) {
  138.     return ret_val;
  139.     }
  140.     advs_1.ascore[play_1.winner - 1] = state_1.rwscor;
  141. /*                         !SCORE TROPHY CASE. */
  142.     i__1 = objcts_1.olnt;
  143.     for (i = 1; i <= i__1; ++i) {
  144. /*                         !RETAIN RAW SCORE AS WELL. */
  145.     j = i;
  146. /*                         !FIND OUT IF IN CASE. */
  147. L3550:
  148.     j = objcts_1.ocan[j - 1];
  149. /*                         !TRACE OWNERSHIP. */
  150.     if (j == 0) {
  151.         goto L3600;
  152.     }
  153.     if (j != oindex_1.tcase) {
  154.         goto L3550;
  155.     }
  156. /*                         !DO ALL LEVELS. */
  157.     advs_1.ascore[play_1.winner - 1] += objcts_1.otval[i - 1];
  158. L3600:
  159.     ;
  160.     }
  161.     scrupd_(0);
  162. /*                         !SEE IF ENDGAME TRIG. */
  163.     return ret_val;
  164. /* RAPPL1, PAGE 3 */
  165.  
  166. /* R4--    CELLAR.  SHUT DOOR AND BAR IT IF HE JUST WALKED IN. */
  167.  
  168. L4000:
  169.     if (prsvec_1.prsa != vindex_1.lookw) {
  170.     goto L4500;
  171.     }
  172. /*                         !LOOK? */
  173.     rspeak_(21);
  174. /*                         !DESCRIBE CELLAR. */
  175.     return ret_val;
  176.  
  177. L4500:
  178.     if (prsvec_1.prsa != vindex_1.walkiw) {
  179.     return ret_val;
  180.     }
  181. /*                         !WALKIN? */
  182.     if ((objcts_1.oflag2[oindex_1.door - 1] & OPENBT + 
  183.         TCHBT) != OPENBT) {
  184.     return ret_val;
  185.     }
  186.     objcts_1.oflag2[oindex_1.door - 1] = (objcts_1.oflag2[oindex_1.door - 1] |
  187.          TCHBT) & ~ OPENBT;
  188.     rspeak_(22);
  189. /*                         !SLAM AND BOLT DOOR. */
  190.     return ret_val;
  191.  
  192. /* R5--    MAZE11.  DESCRIBE STATE OF GRATING. */
  193.  
  194. L5000:
  195.     if (prsvec_1.prsa != vindex_1.lookw) {
  196.     return ret_val;
  197.     }
  198. /*                         !LOOK? */
  199.     rspeak_(23);
  200. /*                         !DESCRIBE. */
  201.     i = 24;
  202. /*                         !ASSUME LOCKED. */
  203.     if (findex_1.grunlf) {
  204.     i = 26;
  205.     }
  206. /*                         !UNLOCKED? */
  207.     if ((objcts_1.oflag2[oindex_1.grate - 1] & OPENBT) != 0) {
  208.     i = 25;
  209.     }
  210. /*                         !OPEN? */
  211.     rspeak_(i);
  212. /*                         !DESCRIBE GRATE. */
  213.     return ret_val;
  214.  
  215. /* R6--    CLEARING.  DESCRIBE CLEARING, MOVE LEAVES. */
  216.  
  217. L6000:
  218.     if (prsvec_1.prsa != vindex_1.lookw) {
  219.     goto L6500;
  220.     }
  221. /*                         !LOOK? */
  222.     rspeak_(27);
  223. /*                         !DESCRIBE. */
  224.     if (findex_1.rvclr == 0) {
  225.     return ret_val;
  226.     }
  227. /*                         !LEAVES MOVED? */
  228.     i = 28;
  229. /*                         !YES, ASSUME GRATE CLOSED. */
  230.     if ((objcts_1.oflag2[oindex_1.grate - 1] & OPENBT) != 0) {
  231.     i = 29;
  232.     }
  233. /*                         !OPEN? */
  234.     rspeak_(i);
  235. /*                         !DESCRIBE GRATE. */
  236.     return ret_val;
  237.  
  238. L6500:
  239.     if (findex_1.rvclr != 0 || qhere_(oindex_1.leave, rindex_1.clear) && (
  240.         prsvec_1.prsa != vindex_1.movew || prsvec_1.prso != 
  241.         oindex_1.leave)) {
  242.     return ret_val;
  243.     }
  244.     rspeak_(30);
  245. /*                         !MOVE LEAVES, REVEAL GRATE. */
  246.     findex_1.rvclr = 1;
  247. /*                         !INDICATE LEAVES MOVED. */
  248.     return ret_val;
  249. /* RAPPL1, PAGE 4 */
  250.  
  251. /* R7--    RESERVOIR SOUTH.  DESCRIPTION DEPENDS ON LOW TIDE FLAG. */
  252.  
  253. L7000:
  254.     if (prsvec_1.prsa != vindex_1.lookw) {
  255.     return ret_val;
  256.     }
  257. /*                         !LOOK? */
  258.     i = 31;
  259. /*                         !ASSUME FULL. */
  260.     if (findex_1.lwtidf) {
  261.     i = 32;
  262.     }
  263. /*                         !IF LOW TIDE, EMPTY. */
  264.     rspeak_(i);
  265. /*                         !DESCRIBE. */
  266.     rspeak_(33);
  267. /*                         !DESCRIBE EXITS. */
  268.     return ret_val;
  269.  
  270. /* R8--    RESERVOIR.  STATE DEPENDS ON LOW TIDE FLAG. */
  271.  
  272. L8000:
  273.     if (prsvec_1.prsa != vindex_1.lookw) {
  274.     return ret_val;
  275.     }
  276. /*                         !LOOK? */
  277.     i = 34;
  278. /*                         !ASSUME FULL. */
  279.     if (findex_1.lwtidf) {
  280.     i = 35;
  281.     }
  282. /*                         !IF LOW TIDE, EMTPY. */
  283.     rspeak_(i);
  284. /*                         !DESCRIBE. */
  285.     return ret_val;
  286.  
  287. /* R9--    RESERVOIR NORTH.  ALSO DEPENDS ON LOW TIDE FLAG. */
  288.  
  289. L9000:
  290.     if (prsvec_1.prsa != vindex_1.lookw) {
  291.     return ret_val;
  292.     }
  293. /*                         !LOOK? */
  294.     i = 36;
  295. /*                         !YOU GET THE IDEA. */
  296.     if (findex_1.lwtidf) {
  297.     i = 37;
  298.     }
  299.     rspeak_(i);
  300.     rspeak_(38);
  301.     return ret_val;
  302.  
  303. /* R10--    GLACIER ROOM.  STATE DEPENDS ON MELTED, VANISHED FLAGS. */
  304.  
  305. L10000:
  306.     if (prsvec_1.prsa != vindex_1.lookw) {
  307.     return ret_val;
  308.     }
  309. /*                         !LOOK? */
  310.     rspeak_(39);
  311. /*                         !BASIC DESCRIPTION. */
  312.     i = 0;
  313. /*                         !ASSUME NO CHANGES. */
  314.     if (findex_1.glacmf) {
  315.     i = 40;
  316.     }
  317. /*                         !PARTIAL MELT? */
  318.     if (findex_1.glacrf) {
  319.     i = 41;
  320.     }
  321. /*                         !COMPLETE MELT? */
  322.     rspeak_(i);
  323. /*                         !DESCRIBE. */
  324.     return ret_val;
  325.  
  326. /* R11--    FOREST ROOM */
  327.  
  328. L11000:
  329.     if (prsvec_1.prsa == vindex_1.walkiw) {
  330.     cevent_1.cflag[cindex_1.cevfor - 1] = TRUE_;
  331.     }
  332. /*                         !IF WALK IN, BIRDIE. */
  333.     return ret_val;
  334.  
  335. /* R12--    MIRROR ROOM.  STATE DEPENDS ON MIRROR INTACT. */
  336.  
  337. L12000:
  338.     if (prsvec_1.prsa != vindex_1.lookw) {
  339.     return ret_val;
  340.     }
  341. /*                         !LOOK? */
  342.     rspeak_(42);
  343. /*                         !DESCRIBE. */
  344.     if (findex_1.mirrmf) {
  345.     rspeak_(43);
  346.     }
  347. /*                         !IF BROKEN, NASTY REMARK. */
  348.     return ret_val;
  349. /* RAPPL1, PAGE 5 */
  350.  
  351. /* R13--    CAVE2 ROOM.  BLOW OUT CANDLES WITH 50% PROBABILITY. */
  352.  
  353. L13000:
  354.     if (prsvec_1.prsa != vindex_1.walkiw) {
  355.     return ret_val;
  356.     }
  357. /*                         !WALKIN? */
  358.     if (prob_(50, 50) || objcts_1.oadv[oindex_1.candl - 1] != 
  359.         play_1.winner || ! ((objcts_1.oflag1[oindex_1.candl - 1] & 
  360.         ONBT) != 0)) {
  361.     return ret_val;
  362.     }
  363.     objcts_1.oflag1[oindex_1.candl - 1] &= ~ ONBT;
  364.     rspeak_(47);
  365. /*                         !TELL OF WINDS. */
  366.     cevent_1.cflag[cindex_1.cevcnd - 1] = FALSE_;
  367. /*                         !HALT CANDLE COUNTDOWN. */
  368.     return ret_val;
  369.  
  370. /* R14--    BOOM ROOM.  BLOW HIM UP IF CARRYING FLAMING OBJECT. */
  371.  
  372. L14000:
  373.     j = objcts_1.odesc2[oindex_1.candl - 1];
  374. /*                         !ASSUME CANDLE. */
  375.     if (objcts_1.oadv[oindex_1.candl - 1] == play_1.winner && (
  376.         objcts_1.oflag1[oindex_1.candl - 1] & ONBT) != 0) {
  377.     goto L14100;
  378.     }
  379.     j = objcts_1.odesc2[oindex_1.torch - 1];
  380. /*                         !ASSUME TORCH. */
  381.     if (objcts_1.oadv[oindex_1.torch - 1] == play_1.winner && (
  382.         objcts_1.oflag1[oindex_1.torch - 1] & ONBT) != 0) {
  383.     goto L14100;
  384.     }
  385.     j = objcts_1.odesc2[oindex_1.match - 1];
  386.     if (objcts_1.oadv[oindex_1.match - 1] == play_1.winner && (
  387.         objcts_1.oflag1[oindex_1.match - 1] & ONBT) != 0) {
  388.     goto L14100;
  389.     }
  390.     return ret_val;
  391. /*                         !SAFE */
  392.  
  393. L14100:
  394.     if (prsvec_1.prsa != vindex_1.trnonw) {
  395.     goto L14200;
  396.     }
  397. /*                         !TURN ON? */
  398.     rspsub_(294, j);
  399. /*                         !BOOM */
  400. /*                         ! */
  401.     jigsup_(44);
  402.     return ret_val;
  403.  
  404. L14200:
  405.     if (prsvec_1.prsa != vindex_1.walkiw) {
  406.     return ret_val;
  407.     }
  408. /*                         !WALKIN? */
  409.     rspsub_(295, j);
  410. /*                         !BOOM */
  411. /*                         ! */
  412.     jigsup_(44);
  413.     return ret_val;
  414.  
  415. /* R15--    NO-OBJS.  SEE IF EMPTY HANDED, SCORE LIGHT SHAFT. */
  416.  
  417. L15000:
  418.     findex_1.empthf = TRUE_;
  419. /*                         !ASSUME TRUE. */
  420.     i__1 = objcts_1.olnt;
  421.     for (i = 1; i <= i__1; ++i) {
  422. /*                         !SEE IF CARRYING. */
  423.     if (objcts_1.oadv[i - 1] == play_1.winner) {
  424.         findex_1.empthf = FALSE_;
  425.     }
  426. /* L15100: */
  427.     }
  428.  
  429.     if (play_1.here != rindex_1.bshaf || ! lit_(play_1.here)) {
  430.     return ret_val;
  431.     }
  432.     scrupd_(state_1.ltshft);
  433. /*                         !SCORE LIGHT SHAFT. */
  434.     state_1.ltshft = 0;
  435. /*                         !NEVER AGAIN. */
  436.     return ret_val;
  437. /* RAPPL1, PAGE 6 */
  438.  
  439. /* R16--    MACHINE ROOM.  DESCRIBE MACHINE. */
  440.  
  441. L16000:
  442.     if (prsvec_1.prsa != vindex_1.lookw) {
  443.     return ret_val;
  444.     }
  445. /*                         !LOOK? */
  446.     i = 46;
  447. /*                         !ASSUME LID CLOSED. */
  448.     if ((objcts_1.oflag2[oindex_1.machi - 1] & OPENBT) != 0) {
  449.     i = 12;
  450.     }
  451. /*                         !IF OPEN, OPEN. */
  452.     rspsub_(45, i);
  453. /*                         !DESCRIBE. */
  454.     return ret_val;
  455.  
  456. /* R17--    BAT ROOM.  UNLESS CARRYING GARLIC, FLY AWAY WITH ME... */
  457.  
  458. L17000:
  459.     if (prsvec_1.prsa != vindex_1.lookw) {
  460.     goto L17500;
  461.     }
  462. /*                         !LOOK? */
  463.     rspeak_(48);
  464. /*                         !DESCRIBE ROOM. */
  465.     if (objcts_1.oadv[oindex_1.garli - 1] == play_1.winner) {
  466.     rspeak_(49);
  467.     }
  468. /*                         !BAT HOLDS NOSE. */
  469.     return ret_val;
  470.  
  471. L17500:
  472.     if (prsvec_1.prsa != vindex_1.walkiw || objcts_1.oadv[oindex_1.garli - 1] 
  473.         == play_1.winner) {
  474.     return ret_val;
  475.     }
  476.     rspeak_(50);
  477. /*                         !TIME TO FLY, JACK. */
  478.     f = moveto_(bats_1.batdrp[rnd_(9)], play_1.winner);
  479. /*                         !SELECT RANDOM DEST. */
  480.     ret_val = FALSE_;
  481. /*                         !INDICATE NEW DESC NEEDED. */
  482.     return ret_val;
  483.  
  484. /* R18--    DOME ROOM.  STATE DEPENDS ON WHETHER ROPE TIED TO RAILING. */
  485.  
  486. L18000:
  487.     if (prsvec_1.prsa != vindex_1.lookw) {
  488.     goto L18500;
  489.     }
  490. /*                         !LOOK? */
  491.     rspeak_(51);
  492. /*                         !DESCRIBE. */
  493.     if (findex_1.domef) {
  494.     rspeak_(52);
  495.     }
  496. /*                         !IF ROPE, DESCRIBE. */
  497.     return ret_val;
  498.  
  499. L18500:
  500.     if (prsvec_1.prsa == vindex_1.leapw) {
  501.     jigsup_(53);
  502.     }
  503. /*                         !DID HE JUMP??? */
  504.     return ret_val;
  505.  
  506. /* R19--    TORCH ROOM.  ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING. */
  507.  
  508. L19000:
  509.     if (prsvec_1.prsa != vindex_1.lookw) {
  510.     return ret_val;
  511.     }
  512. /*                         !LOOK? */
  513.     rspeak_(54);
  514. /*                         !DESCRIBE. */
  515.     if (findex_1.domef) {
  516.     rspeak_(55);
  517.     }
  518. /*                         !IF ROPE, DESCRIBE. */
  519.     return ret_val;
  520.  
  521. /* R20--    CAROUSEL ROOM.  SPIN HIM OR KILL HIM. */
  522.  
  523. L20000:
  524.     if (prsvec_1.prsa != vindex_1.lookw) {
  525.     goto L20500;
  526.     }
  527. /*                         !LOOK? */
  528.     rspeak_(56);
  529. /*                         !DESCRIBE. */
  530.     if (! findex_1.caroff) {
  531.     rspeak_(57);
  532.     }
  533. /*                         !IF NOT FLIPPED, SPIN. */
  534.     return ret_val;
  535.  
  536. L20500:
  537.     if (prsvec_1.prsa == vindex_1.walkiw && findex_1.carozf) {
  538.     jigsup_(58);
  539.     }
  540. /*                         !WALKED IN. */
  541.     return ret_val;
  542. /* RAPPL1, PAGE 7 */
  543.  
  544. /* R21--    LLD ROOM.  HANDLE EXORCISE, DESCRIPTIONS. */
  545.  
  546. L21000:
  547.     if (prsvec_1.prsa != vindex_1.lookw) {
  548.     goto L21500;
  549.     }
  550. /*                         !LOOK? */
  551.     rspeak_(59);
  552. /*                         !DESCRIBE. */
  553.     if (! findex_1.lldf) {
  554.     rspeak_(60);
  555.     }
  556. /*                         !IF NOT VANISHED, GHOSTS. */
  557.     return ret_val;
  558.  
  559. L21500:
  560.     if (prsvec_1.prsa != vindex_1.exorcw) {
  561.     return ret_val;
  562.     }
  563. /*                         !EXORCISE? */
  564.     if (objcts_1.oadv[oindex_1.bell - 1] == play_1.winner && objcts_1.oadv[
  565.         oindex_1.book - 1] == play_1.winner && objcts_1.oadv[
  566.         oindex_1.candl - 1] == play_1.winner && (objcts_1.oflag1[
  567.         oindex_1.candl - 1] & ONBT) != 0) {
  568.     goto L21600;
  569.     }
  570.     rspeak_(62);
  571. /*                         !NOT EQUIPPED. */
  572.     return ret_val;
  573.  
  574. L21600:
  575.     if (qhere_(oindex_1.ghost, play_1.here)) {
  576.     goto L21700;
  577.     }
  578. /*                         !GHOST HERE? */
  579.     jigsup_(61);
  580. /*                         !NOPE, EXORCISE YOU. */
  581.     return ret_val;
  582.  
  583. L21700:
  584.     newsta_(oindex_1.ghost, 63, 0, 0, 0);
  585. /*                         !VANISH GHOST. */
  586.     findex_1.lldf = TRUE_;
  587. /*                         !OPEN GATE. */
  588.     return ret_val;
  589.  
  590. /* R22--    LLD2-ROOM.  IS HIS HEAD ON A POLE? */
  591.  
  592. L22000:
  593.     if (prsvec_1.prsa != vindex_1.lookw) {
  594.     return ret_val;
  595.     }
  596. /*                         !LOOK? */
  597.     rspeak_(64);
  598. /*                         !DESCRIBE. */
  599.     if (findex_1.onpolf) {
  600.     rspeak_(65);
  601.     }
  602. /*                         !ON POLE? */
  603.     return ret_val;
  604.  
  605. /* R23--    DAM ROOM.  DESCRIBE RESERVOIR, PANEL. */
  606.  
  607. L23000:
  608.     if (prsvec_1.prsa != vindex_1.lookw) {
  609.     return ret_val;
  610.     }
  611. /*                         !LOOK? */
  612.     rspeak_(66);
  613. /*                         !DESCRIBE. */
  614.     i = 67;
  615.     if (findex_1.lwtidf) {
  616.     i = 68;
  617.     }
  618.     rspeak_(i);
  619. /*                         !DESCRIBE RESERVOIR. */
  620.     rspeak_(69);
  621. /*                         !DESCRIBE PANEL. */
  622.     if (findex_1.gatef) {
  623.     rspeak_(70);
  624.     }
  625. /*                         !BUBBLE IS GLOWING. */
  626.     return ret_val;
  627.  
  628. /* R24--    TREE ROOM */
  629.  
  630. L24000:
  631.     if (prsvec_1.prsa != vindex_1.lookw) {
  632.     return ret_val;
  633.     }
  634. /*                         !LOOK? */
  635.     rspeak_(660);
  636. /*                         !DESCRIBE. */
  637.     i = 661;
  638. /*                         !SET FLAG FOR BELOW. */
  639.     i__1 = objcts_1.olnt;
  640.     for (j = 1; j <= i__1; ++j) {
  641. /*                         !DESCRIBE OBJ IN FORE3. */
  642.     if (! qhere_(j, rindex_1.fore3) || j == oindex_1.ftree) {
  643.         goto L24200;
  644.     }
  645.     rspeak_(i);
  646. /*                         !SET STAGE, */
  647.     i = 0;
  648.     rspsub_(502, objcts_1.odesc2[j - 1]);
  649. /*                         !DESCRIBE. */
  650. L24200:
  651.     ;
  652.     }
  653.     return ret_val;
  654. /* RAPPL1, PAGE 8 */
  655.  
  656. /* R25--    CYCLOPS-ROOM.  DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG.
  657.  */
  658.  
  659. L25000:
  660.     if (prsvec_1.prsa != vindex_1.lookw) {
  661.     return ret_val;
  662.     }
  663. /*                         !LOOK? */
  664.     rspeak_(606);
  665. /*                         !DESCRIBE. */
  666.     i = 607;
  667. /*                         !ASSUME BASIC STATE. */
  668.     if (findex_1.rvcyc > 0) {
  669.     i = 608;
  670.     }
  671. /*                         !>0?  HUNGRY. */
  672.     if (findex_1.rvcyc < 0) {
  673.     i = 609;
  674.     }
  675. /*                         !<0?  THIRSTY. */
  676.     if (findex_1.cyclof) {
  677.     i = 610;
  678.     }
  679. /*                         !ASLEEP? */
  680.     if (findex_1.magicf) {
  681.     i = 611;
  682.     }
  683. /*                         !GONE? */
  684.     rspeak_(i);
  685. /*                         !DESCRIBE. */
  686.     if (! findex_1.cyclof && findex_1.rvcyc != 0) {
  687.     i__1 = abs(findex_1.rvcyc) + 193;
  688.     rspeak_(i__1);
  689.     }
  690.     return ret_val;
  691.  
  692. /* R26--    BANK BOX ROOM. */
  693.  
  694. L26000:
  695.     if (prsvec_1.prsa != vindex_1.walkiw) {
  696.     return ret_val;
  697.     }
  698. /*                         !SURPRISE HIM. */
  699.     for (i = 1; i <= 8; i += 2) {
  700. /*                         !SCOLRM DEPENDS ON */
  701.     if (screen_1.fromdr == screen_1.scoldr[i - 1]) {
  702.         screen_1.scolrm = screen_1.scoldr[i];
  703.     }
  704. /* L26100: */
  705.     }
  706. /*                         !ENTRY DIRECTION. */
  707.     return ret_val;
  708.  
  709. /* R27--    TREASURE ROOM. */
  710.  
  711. L27000:
  712.     if (prsvec_1.prsa != vindex_1.walkiw || ! hack_1.thfact) {
  713.     return ret_val;
  714.     }
  715.     if (objcts_1.oroom[oindex_1.thief - 1] != play_1.here) {
  716.     newsta_(oindex_1.thief, 82, play_1.here, 0, 0);
  717.     }
  718.     hack_1.thfpos = play_1.here;
  719. /*                         !RESET SEARCH PATTERN. */
  720.     objcts_1.oflag2[oindex_1.thief - 1] |= FITEBT;
  721.     if (objcts_1.oroom[oindex_1.chali - 1] == play_1.here) {
  722.     objcts_1.oflag1[oindex_1.chali - 1] &= ~ TAKEBT;
  723.     }
  724.  
  725. /*     VANISH EVERYTHING IN ROOM */
  726.  
  727.     j = 0;
  728. /*                         !ASSUME NOTHING TO VANISH. */
  729.     i__1 = objcts_1.olnt;
  730.     for (i = 1; i <= i__1; ++i) {
  731.     if (i == oindex_1.chali || i == oindex_1.thief || ! qhere_(i, 
  732.         play_1.here)) {
  733.         goto L27200;
  734.     }
  735.     j = 83;
  736. /*                         !FLAG BYEBYE. */
  737.     objcts_1.oflag1[i - 1] &= ~ VISIBT;
  738. L27200:
  739.     ;
  740.     }
  741.     rspeak_(j);
  742. /*                         !DESCRIBE. */
  743.     return ret_val;
  744.  
  745. /* R28--    CLIFF FUNCTION.  SEE IF CARRYING INFLATED BOAT. */
  746.  
  747. L28000:
  748.     findex_1.deflaf = objcts_1.oadv[oindex_1.rboat - 1] != play_1.winner;
  749. /*                         !TRUE IF NOT CARRYING. */
  750.     return ret_val;
  751. /* RAPPL1, PAGE 9 */
  752.  
  753. /* R29--    RIVR4 ROOM.  PLAY WITH BUOY. */
  754.  
  755. L29000:
  756.     if (! findex_1.buoyf || objcts_1.oadv[oindex_1.buoy - 1] != play_1.winner)
  757.          {
  758.     return ret_val;
  759.     }
  760.     rspeak_(84);
  761. /*                         !GIVE HINT, */
  762.     findex_1.buoyf = FALSE_;
  763. /*                         !THEN DISABLE. */
  764.     return ret_val;
  765.  
  766. /* R30--    OVERFALLS.  DOOM. */
  767.  
  768. L30000:
  769.     if (prsvec_1.prsa != vindex_1.lookw) {
  770.     jigsup_(85);
  771.     }
  772. /*                         !OVER YOU GO. */
  773.     return ret_val;
  774.  
  775. /* R31--    BEACH ROOM.  DIG A HOLE. */
  776.  
  777. L31000:
  778.     if (prsvec_1.prsa != vindex_1.digw || prsvec_1.prso != oindex_1.shove) {
  779.     return ret_val;
  780.     }
  781.     ++findex_1.rvsnd;
  782. /*                         !INCREMENT DIG STATE. */
  783.     switch (findex_1.rvsnd) {
  784.     case 1:  goto L31100;
  785.     case 2:  goto L31100;
  786.     case 3:  goto L31100;
  787.     case 4:  goto L31400;
  788.     case 5:  goto L31500;
  789.     }
  790. /*                         !PROCESS STATE. */
  791.     bug_(2, findex_1.rvsnd);
  792.  
  793. L31100:
  794.     i__1 = findex_1.rvsnd + 85;
  795.     rspeak_(i__1);
  796. /*                         !1-3... DISCOURAGE HIM. */
  797.     return ret_val;
  798.  
  799. L31400:
  800.     i = 89;
  801. /*                         !ASSUME DISCOVERY. */
  802.     if ((objcts_1.oflag1[oindex_1.statu - 1] & VISIBT) != 0) {
  803.     i = 88;
  804.     }
  805.     rspeak_(i);
  806.     objcts_1.oflag1[oindex_1.statu - 1] |= VISIBT;
  807.     return ret_val;
  808.  
  809. L31500:
  810.     findex_1.rvsnd = 0;
  811. /*                         !5... SAND COLLAPSES */
  812.     jigsup_(90);
  813. /*                         !AND SO DOES HE. */
  814.     return ret_val;
  815.  
  816. /* R32--    TCAVE ROOM.  DIG A HOLE IN GUANO. */
  817.  
  818. L32000:
  819.     if (prsvec_1.prsa != vindex_1.digw || prsvec_1.prso != oindex_1.shove) {
  820.     return ret_val;
  821.     }
  822.     i = 91;
  823. /*                         !ASSUME NO GUANO. */
  824.     if (! qhere_(oindex_1.guano, play_1.here)) {
  825.     goto L32100;
  826.     }
  827. /*                         !IS IT HERE? */
  828. /* Computing MIN */
  829.     i__1 = 4, i__2 = findex_1.rvgua + 1;
  830.     findex_1.rvgua = min(i__1,i__2);
  831. /*                         !YES, SET NEW STATE. */
  832.     i = findex_1.rvgua + 91;
  833. /*                         !GET NASTY REMARK. */
  834. L32100:
  835.     rspeak_(i);
  836. /*                         !DESCRIBE. */
  837.     return ret_val;
  838.  
  839. /* R33--    FALLS ROOM */
  840.  
  841. L33000:
  842.     if (prsvec_1.prsa != vindex_1.lookw) {
  843.     return ret_val;
  844.     }
  845. /*                         !LOOK? */
  846.     rspeak_(96);
  847. /*                         !DESCRIBE. */
  848.     i = 97;
  849. /*                         !ASSUME NO RAINBOW. */
  850.     if (findex_1.rainbf) {
  851.     i = 98;
  852.     }
  853. /*                         !GOT ONE? */
  854.     rspeak_(i);
  855. /*                         !DESCRIBE. */
  856.     return ret_val;
  857. /* RAPPL1, PAGE 10 */
  858.  
  859. /* R34--    LEDGE FUNCTION.  LEDGE CAN COLLAPSE. */
  860.  
  861. L34000:
  862.     if (prsvec_1.prsa != vindex_1.lookw) {
  863.     return ret_val;
  864.     }
  865. /*                         !LOOK? */
  866.     rspeak_(100);
  867. /*                         !DESCRIBE. */
  868.     i = 102;
  869. /*                         !ASSUME SAFE ROOM OK. */
  870.     if ((rooms_1.rflag[rindex_1.msafe - 1] & RMUNG) != 0) {
  871.     i = 101;
  872.     }
  873.     rspeak_(i);
  874. /*                         !DESCRIBE. */
  875.     return ret_val;
  876.  
  877. /* R35--    SAFE ROOM.  STATE DEPENDS ON WHETHER SAFE BLOWN. */
  878.  
  879. L35000:
  880.     if (prsvec_1.prsa != vindex_1.lookw) {
  881.     return ret_val;
  882.     }
  883. /*                         !LOOK? */
  884.     rspeak_(104);
  885. /*                         !DESCRIBE. */
  886.     i = 105;
  887. /*                         !ASSUME OK. */
  888.     if (findex_1.safef) {
  889.     i = 106;
  890.     }
  891. /*                         !BLOWN? */
  892.     rspeak_(i);
  893. /*                         !DESCRIBE. */
  894.     return ret_val;
  895.  
  896. /* R36--    MAGNET ROOM.  DESCRIBE, CHECK FOR SPINDIZZY DOOM. */
  897.  
  898. L36000:
  899.     if (prsvec_1.prsa != vindex_1.lookw) {
  900.     goto L36500;
  901.     }
  902. /*                         !LOOK? */
  903.     rspeak_(107);
  904. /*                         !DESCRIBE. */
  905.     return ret_val;
  906.  
  907. L36500:
  908.     if (prsvec_1.prsa != vindex_1.walkiw || ! findex_1.caroff) {
  909.     return ret_val;
  910.     }
  911. /*                         !WALKIN ON FLIPPED? */
  912.     if (findex_1.carozf) {
  913.     goto L36600;
  914.     }
  915. /*                         !ZOOM? */
  916.     rspeak_(108);
  917. /*                         !NO, SPIN HIS COMPASS. */
  918.     return ret_val;
  919.  
  920. L36600:
  921.     i = 58;
  922. /*                         !SPIN HIS INSIDES. */
  923.     if (play_1.winner != aindex_1.player) {
  924.     i = 99;
  925.     }
  926. /*                         !SPIN ROBOT. */
  927.     jigsup_(i);
  928. /*                         !DEAD. */
  929.     return ret_val;
  930.  
  931. /* R37--    CAGE ROOM.  IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM. */
  932.  
  933. L37000:
  934.     if (findex_1.cagesf) {
  935.     f = moveto_(rindex_1.cager, play_1.winner);
  936.     }
  937. /*                         !IF SOLVED, MOVE. */
  938.     return ret_val;
  939.  
  940. } /* rappl1_ */
  941.